import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 实际进度 / 实际进度添加
 * @param {object} data
 * @param {string} [data.actualCompletionTime] 实际完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.actualStartTime] 实际开始时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.advanceDays] 提前/滞后天数
 * @param {array<number>} [data.attachList] 附件ID列表
 * @param {string} [data.causeAnalysis] 原因分析
 * @param {number} [data.completionPercentage] 完成百分比
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.id] 主键
 * @param {number} [data.isMilestoneNode] 是否里程碑节点
 * @param {string} [data.planTaskName] 计划任务名称
 * @param {number} [data.plannedConstructionPeriod] 计划工期
 * @param {string} [data.plannedEndTime] 计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.plannedStartTime] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.preTask] 前置任务
 * @param {string} [data.remedialMeasuresDelayedConstructionPeriod] 工期滞后的补救措施
 * @param {string} [data.responsiblePerson] 负责人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportAdd(data, config) {
  return post("/progressReport/add", data, config);
}

/**
 * 实际进度 / 实际进度删除
 * @param {object} params
 * @param {object} data
 * @param {string} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportDelete(params, data, config) {
  return postWithQueryParams("/progressReport/delete", params, data, config);
}

/**
 * 实际进度 / 实际进度清除实际进度
 * @param {object} params
 * @param {object} data
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportDeleteSchedule(params, data, config) {
  return postWithQueryParams("/progressReport/deleteSchedule", params, data, config);
}

/**
 * 实际进度 / 实际进度查询详情
 * @param {object} params
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportDetail(params, config) {
  return get("/progressReport/detail", params, config);
}

/**
 * 实际进度 / 实际进度分页查询
 * @param {object} data
 * @param {number} [data.id] 主键
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProgressReport页面展示实体>>}
 */
export function progressReportList(data, config) {
  return post("/progressReport/list", data, config);
}

/**
 * 实际进度 / 实际进度查看上报记录
 * @param {object} data
 * @param {number} [data.id] 主键
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {number} [data.start] 查询记录起始下标
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportListById(data, config) {
  return post("/progressReport/listById", data, config);
}

/**
 * 实际进度 / 实际进度更新
 * @param {object} data
 * @param {string} [data.actualCompletionTime] 实际完成时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.actualStartTime] 实际开始时间 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.advanceDays] 提前/滞后天数
 * @param {array<number>} [data.attachList] 附件ID列表
 * @param {string} [data.causeAnalysis] 原因分析
 * @param {number} [data.completionPercentage] 完成百分比
 * @param {string} [data.createUser] 创建用户
 * @param {number} [data.id] 主键
 * @param {number} [data.isMilestoneNode] 是否里程碑节点
 * @param {string} [data.planTaskName] 计划任务名称
 * @param {number} [data.plannedConstructionPeriod] 计划工期
 * @param {string} [data.plannedEndTime] 计划结束时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.plannedStartTime] 计划开始时间 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.preTask] 前置任务
 * @param {string} [data.remedialMeasuresDelayedConstructionPeriod] 工期滞后的补救措施
 * @param {string} [data.responsiblePerson] 负责人
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportUpdate(data, config) {
  return post("/progressReport/update", data, config);
}

/**
 * 实际进度 / 实际进度查看实际进度
 * @param {object} params
 * @param {number} params.id ID
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProgressReport页面展示实体>}
 */
export function progressReportViewActualProgress(params, config) {
  return get("/progressReport/viewActualProgress", params, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} ProgressReport页面展示实体 页面展示实体
 * @property {string} actualCompletionTime 实际完成时间
 * @property {string} actualStartTime 实际开始时间
 * @property {number} advanceDays 提前/滞后天数
 * @property {string} causeAnalysis 原因分析
 * @property {number} completionPercentage 完成百分比
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {number} id 主键
 * @property {number} isMilestoneNode 是否里程碑节点
 * @property {string} planTaskName 计划任务名称
 * @property {number} plannedConstructionPeriod 计划工期
 * @property {string} plannedEndTime 计划结束时间
 * @property {string} plannedStartTime 计划开始时间
 * @property {string} preTask 前置任务
 * @property {string} remedialMeasuresDelayedConstructionPeriod 工期滞后的补救措施
 * @property {string} reportPerson 上报人
 * @property {string} responsiblePerson 负责人
 * @property {number} thisRatio 本次上报比例
 * @property {number} totalCompletionPercentage
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @description 页面展示实体
 */
